/**
 * @file FrameData.h
 * @author Lost
 * @date 五月 2018
 * @brief 
 * 框架数据
 */


#ifndef __FRAME_DATA_H__
#define __FRAME_DATA_H__

#include <string>

/*!< 地图最大高度 */
#define MAX_MAP_HIGHT 80
/*!< 地图最大宽度 */
#define MAX_MAP_WIDTH 80

/**
* @brief 地图单元格类型
*/
enum EMapUnitType
{
    /*!< 空地 */
    EM_MAP_UNIT_TYPE_NULL = 0,
    /*!< 墙 */
    EM_MAP_UNIT_TYPE_WALL = 1,
    /*!< 蛇 */
    EM_MAP_UNIT_TYPE_SNACKE = 2,
    /*!< 食物 */
    EM_MAP_UNIT_TYPE_FOOD = 3,
    /*!< 最大值 */
    EM_MAP_UNIT_TYPE_MAX,
};

/**
 * @brief 方向类型
 */
enum EDirType
{
    /*!< 上 */
    EM_DIR_TYPE_UP = 0,
    /*!< 下 */
    EM_DIR_TYPE_DOWN = 1,
    /*!< 左 */
    EM_DIR_TYPE_LEFT = 2,
    /*!< 右 */
    EM_DIR_TYPE_RIGHT = 3,
    /*!< 错误 */
    EM_DIR_TYPE_ERROR = 4,
};

#ifdef _WIN32
static const char* UIChar[EM_MAP_UNIT_TYPE_MAX] =
{
    "  ",//EM_MAP_UNIT_TYPE_NULL
    "●",//EM_MAP_UNIT_TYPE_WALL
    "■",//EM_MAP_UNIT_TYPE_SNACKE
    "◆" //EM_MAP_UNIT_TYPE_FOOD
};
#else
static const char* UIChar[EM_MAP_UNIT_TYPE_MAX] =
{
    "  ",//EM_MAP_UNIT_TYPE_NULL
    "墙",//EM_MAP_UNIT_TYPE_WALL
    "蛇",//EM_MAP_UNIT_TYPE_SNACKE
    "食",//EM_MAP_UNIT_TYPE_FOOD
};
#endif


/**
 * @brief 坐标
 */
typedef struct stPos
{
    //横坐标
    int iX;
    //纵坐标
    int iY;
}Pos;

/**
 * @brief 地图单元格数据
 */
typedef struct stMapUnitData
{
    /*!< 类型 */
    EMapUnitType eType;
}MapUnitData;


/**
* @brief 地图数据
*/
typedef struct stMapData
{
    /*!< 偏移横坐标 */
    int iOffsetX;
    /*!< 偏移纵坐标 */
    int iOffsetY;
    /*!< 高度 */
    int iHight;
    /*!< 宽度 */
    int iWidth;
    /*!< 单元格 */
    MapUnitData stUnitData[MAX_MAP_HIGHT][MAX_MAP_WIDTH];
}MapData;

/**
 * @brief 蛇数据
 */
typedef struct stSnake
{
    /*!< 长度 */
    int iLength;
    /*!< 蛇坐标 */
    Pos stBody[MAX_MAP_HIGHT*MAX_MAP_WIDTH];
}SnakeData;

/**
* @brief 框架数据
*/
typedef struct stFrameData
{
    /*!< 地图 */
    MapData stMap;
    /*!< 蛇 */
    SnakeData stSnake;
}FrameData;


#endif
